home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dskut / dfa13.zip / DFAMON.PAS < prev    next >
Pascal/Delphi Source File  |  1986-11-21  |  5KB  |  267 lines

  1.  
  2. (*
  3.  * dfamon - monitor a DFA activity
  4.  *
  5.  * s.h.smith, 18-nov-86
  6.  *
  7.  *)
  8.  
  9. {$c-}
  10.  
  11. {$i \shs\tools\regpack.inc}
  12. {$i \shs\tools\givetime.inc}
  13. {$i \shs\tools\popup.inc}
  14.  
  15.  
  16. type
  17.    asciiz = array[1..63] of char;
  18.    asciizp = ^asciiz;
  19.    anystring = string[100];
  20.  
  21.    namerec = array [0..19] of record
  22.       openmode:       char;
  23.       name:           asciiz;
  24.    end;
  25.  
  26. var
  27.    segment:       integer;
  28.  
  29.    readhits:      ^integer;
  30.    realreads:     ^integer;
  31.    nametable:     ^namerec;
  32.    bufn:          ^byte;
  33.    changed:       ^byte;
  34.    handle:        ^integer;
  35.  
  36.    bar:           string[80];
  37.    prevhits:      integer;
  38.    prevreal:      integer;
  39.    prevlast:      integer;
  40.    ch:            char;
  41.  
  42.  
  43. procedure init;
  44. var
  45.    i:       integer;
  46.  
  47. begin
  48.    segment := sseg + 1;
  49.    while memw[segment:$60e] <> $DFAC do
  50.    begin
  51.       if segment = cseg then
  52.       begin
  53.          displn('Can''t find DFA13 in memory.');
  54.          halt;
  55.       end
  56.       else
  57.          segment := segment + 1;
  58.    end;
  59.  
  60.    readhits  := ptr(segment,$107);
  61.    realreads := ptr(segment,$109);
  62.    bufn      := ptr(segment,$10c);
  63.    changed   := ptr(segment,$10d);
  64.    nametable := ptr(segment,$10e);
  65.    handle    := ptr(segment,$611);
  66.  
  67.    changed^ := 1;
  68.    prevreal := -1;
  69.    prevhits := -1;
  70.    prevlast := 0;
  71.  
  72.    bar := '';
  73.    for i := 1 to 29 do
  74.       bar := bar + #176;
  75.    for i := 1 to 12 do
  76.       bar := bar + #177;
  77.    bar := bar + #178;
  78. end;
  79.  
  80.  
  81. procedure zero_totals;
  82. begin
  83.    readhits^ := 0;
  84.    realreads^ := 0;
  85.    changed^ := 1;
  86.    prevreal := -1;
  87.    prevhits := -1;
  88. end;
  89.  
  90.  
  91. procedure clear_files;
  92. var
  93.    i: integer;
  94. begin
  95.    for i := 0 to 19 do
  96.       with nametable^[i] do
  97.          if openmode = '.' then
  98.          begin
  99.             openmode := #0;
  100.             name[1] := #0;
  101.          end;
  102.  
  103.    changed^ := 1;
  104. end;
  105.  
  106.  
  107. procedure display_bar(y,n:       integer);
  108. var
  109.    s:       string[10];
  110.  
  111. begin
  112.    if y=6 then
  113.    begin
  114.       if prevhits = n then exit;
  115.       prevhits := n;
  116.    end
  117.    else begin
  118.       if prevreal = n then exit;
  119.       prevreal := n;
  120.    end;
  121.  
  122.    if n > 999 then
  123.       n := 999;
  124.    if y=6 then
  125.       str(n shr 1:3,s)
  126.    else
  127.       str(n:3,s);
  128.  
  129.    if n >= 30 then
  130.       n := ((n-30) div 10) + 30;
  131.    if n > length(bar) then
  132.       n := length(bar);
  133.  
  134.    gotoxy(1,y);
  135.    normvideo;
  136.    disp(' '+s+' '+copy(bar,1,n));
  137.    clreol;
  138. end;
  139.  
  140.  
  141. procedure display_name(n:       integer);
  142. var
  143.    i:       integer;
  144.    s:       anystring;
  145.  
  146. begin
  147.  
  148.    with nametable^[n] do
  149.    begin
  150.  
  151.       if (openmode <> #0) then
  152.       begin
  153.          if n = lo(handle^) then
  154.             s := ' * '
  155.          else
  156.             s := '   ';
  157.  
  158.          s := s + openmode + ' ';
  159.          i := 1;
  160.          while name[i] <> #0 do
  161.          begin
  162.             s := s + name[i];
  163.             i := i + 1;
  164.          end;
  165.  
  166.          if i > 1 then
  167.          begin
  168.             if openmode = '.' then lowvideo else normvideo;
  169.             disp(s);
  170.             clreol;
  171.             writeln;
  172.          end;
  173.       end;
  174.    end;
  175. end;
  176.  
  177.  
  178. procedure display_status;
  179. var
  180.    va_ratio:       integer;
  181.    i:              integer;
  182.    j:              integer;
  183.  
  184. begin
  185.    if changed^ <> 0 then
  186.    begin
  187.       changed^ := 0;
  188.  
  189.       gotoxy(1,9);
  190.       for i := 0 to 19 do
  191.          display_name(i);
  192.  
  193.       j := wherey;
  194.       for i := j to prevlast-1 do
  195.       begin
  196.          clreol;
  197.          writeln;
  198.       end;
  199.  
  200.       prevlast := j;
  201.    end;
  202.  
  203.  
  204.    if (realreads^ < 0) or (readhits^ < 0) then
  205.       zero_totals;
  206.  
  207.    if (realreads^ <> 0) then
  208.       va_ratio := readhits^ div realreads^
  209.    else
  210.       va_ratio := 0;
  211.  
  212.    display_bar(3,va_ratio);
  213.    display_bar(6,bufn^ shr 1);
  214.    gotoxy(48,19);
  215. end;
  216.  
  217.  
  218. begin
  219.    gotoxy(1,wherey-1);
  220.    clreol;
  221.    gotoxy(1,wherey-1);
  222.    clreol;
  223.  
  224.    window(1,1,80,25);
  225.    back_attr := 0;
  226.    low_attr := lightgray;
  227.  
  228.    normvideo;
  229.    open_pop_up(30,3,79,23,'File Accleration Monitor (v1.3 11/86 SHS)');
  230.  
  231.    clrscr;
  232.    displn('Searching for DFA13 in memory...');
  233.    init;
  234.  
  235.    clrscr; writeln;
  236.    lowvideo;
  237.    displn(' Logical/Physical Ratio:'); writeln; writeln;
  238.    displn(' Buffer Contents:'); writeln; writeln;
  239.    displn(' Files:');
  240.    gotoxy(2,19);
  241.    disp('Commands:  Q)uit,  Z)ero ratio,  C)lear files');
  242.  
  243.    ch := '?';
  244.    repeat
  245.       if not invisible then
  246.          display_status;
  247.  
  248.       give_up_time;
  249.       give_up_time;
  250.  
  251.       if keypressed then
  252.       begin
  253.          read(kbd,ch);
  254.          ch := upcase(ch);
  255.          case ch of
  256.             'Q': ;
  257.             'Z': zero_totals;
  258.             'C': clear_files;
  259.          end;
  260.       end;
  261.    until ch = 'Q';
  262.  
  263.    remove_pop_up;
  264.  
  265. end.
  266.  
  267.